package pe.com.cotelasa.helper;

import java.awt.print.PrinterException;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

import pe.com.cotelasa.common.printer.PrinterService;
import pe.com.cotelasa.common.printer.PrinterUtility;
import pe.com.cotelasa.scp.dominio.common.Constantes;
import pe.com.cotelasa.scp.dominio.common.util.UtilitarioCadenas;
import pe.com.cotelasa.scp.dominio.common.util.UtilitarioFecha;
import pe.com.cotelasa.scp.entidad.DetalleGuiaRemision;
import pe.com.cotelasa.scp.entidad.Empresa;
import pe.com.cotelasa.scp.entidad.GuiaRemision;
import pe.com.cotelasa.scp.entidad.Proveedor;

public class GuiaRemisionPrintHelper {
    //PrinterService print = new PrinterService(36,"/Users/apple/Documents/COTELASA/reporte.txt", false);

    public static void imprimir(GuiaRemision guiaRemision,String impresora)
            throws PrinterException {
        DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
        decimalFormatSymbols.setDecimalSeparator('.');
        decimalFormatSymbols.setGroupingSeparator(',');
        DecimalFormat df = new DecimalFormat("#,##0.00", decimalFormatSymbols);

        StringBuilder sbLinea = new StringBuilder();

        //PrinterService print = new PrinterService(36,"\\\\192.168.1.40\\FX890", false);
        PrinterService print = new PrinterService(36, impresora, false);
        System.out.println("por aca esta");
        if (!print.startPrintService()) {
            System.out.println("no se pudoooooooooooooo");
            throw new PrinterException("Error en Impresora. Verifique !!!");

        }
        print.activateCondensed();
        print.printBlankLine(8);// Avanzo 8 lineas
        // INICIO Fechas 
        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(17));
        sbLinea.append(UtilitarioFecha.formatearFecha(guiaRemision.getFechaEmision(), "dd/MM/yyyy"));
        sbLinea.append(PrinterUtility.espaciosBlanco(35));
        sbLinea.append(UtilitarioFecha.formatearFecha(guiaRemision.getFechaInicioTraslado(), "dd/MM/yyyy"));
        print.printLine(sbLinea.toString(), true);
        print.printBlankLine(2);
        // FIN Fechas

        String dirPartida = guiaRemision.getSedePartida().getDireccion();
        String dirLlegada = guiaRemision.getSedeLlegada().getDireccion();
        int lineaMax = 3;
        do {
            sbLinea = new StringBuilder();
            int posLLegada = 0;
            int posPartida = 0;

            if (lineaMax == 0) {
                break; // Solo acepta 5 lineas como maximo
            }
            //34 espacios hasta terminar partida 
            posPartida = (dirPartida.length() >= 50) ? 50 : dirPartida.length();
            if (posPartida > 0) {
                sbLinea.append(PrinterUtility.espaciosBlanco(3));
                sbLinea.append(dirPartida.substring(0, posPartida));
                sbLinea.append(PrinterUtility.espaciosBlanco(65 - dirPartida.length()));
            } else {
                sbLinea.append(PrinterUtility.espaciosBlanco(65 - dirPartida.length()));
            }

            posLLegada = (dirLlegada.length() >= 50) ? 50 : dirLlegada.length();
            if (posLLegada > 0) {
                sbLinea.append(dirLlegada.substring(0, posLLegada));
            }

            lineaMax--;
            dirPartida = dirPartida.substring(posPartida, dirPartida.length());
            dirLlegada = dirLlegada.substring(posLLegada, dirLlegada.length());
            print.printLine(sbLinea.toString(), true);
        } while (dirPartida.length() > 0 && dirLlegada.length() > 0);
        // FIN Dir. LLegada / Partida

        print.printBlankLine(6 - lineaMax);



        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(85));
        sbLinea.append(guiaRemision.getMarcaVehiculo());

        print.printLine(sbLinea.toString(), true);

        print.printBlankLine(1);

        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(3));
        sbLinea.append(guiaRemision.getNombreDestinatario());

        sbLinea.append(PrinterUtility.espaciosBlanco(75 - guiaRemision.getNombreDestinatario().length()));
        sbLinea.append(guiaRemision.getPlacaVehiculo());

        sbLinea.append(PrinterUtility.espaciosBlanco(42 - guiaRemision.getPlacaVehiculo().length()));
        sbLinea.append(guiaRemision.getConstanciaInscripcion());

        print.printLine(sbLinea.toString(), true);


        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(8));
        sbLinea.append(guiaRemision.getRucDestinatario());

        sbLinea.append(PrinterUtility.espaciosBlanco(75));
        sbLinea.append(guiaRemision.getLicenciaConductor());

        print.printLine(sbLinea.toString(), true);



        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(8));
        sbLinea.append(guiaRemision.getDireccionDestinatario().substring(0, 50));

        sbLinea.append(PrinterUtility.espaciosBlanco(110 - guiaRemision.getDireccionDestinatario().length()));
        sbLinea.append(df.format(guiaRemision.getCostoMinimoTraslado()));
        print.printLine(sbLinea.toString(), true);


        print.printBlankLine(3);


        int lineaTotales = 0;
        if (!guiaRemision.getDetalleGuiaRemisions() .isEmpty()) {
            for (DetalleGuiaRemision detalle : guiaRemision.getDetalleGuiaRemisions()) {

                boolean first = true;


                String producto = detalle.getArticulo().getNombreComercial()+" "+detalle.getPartidaLote();
                String auxiliar = "";
                lineaMax = 35 - lineaTotales;
                do {


                    int posPartida = 0;

                    if (lineaMax > 0) {

                        //34 espacios hasta terminar partida 
                        posPartida = (producto.length() >= 85) ? 85 : producto.length();

                        sbLinea = new StringBuilder();
                        sbLinea.append(PrinterUtility.espaciosBlanco(3));


                        if (posPartida > 0) {
                            sbLinea.append(producto.substring(0, posPartida));
                            if (first) {
                                auxiliar = producto.substring(0, posPartida);
                            }
                        }

                        producto = producto.substring(posPartida, producto.length());

                        if (first) {

                            print.printLine(sbLinea.toString(), false);

                            sbLinea = new StringBuilder();
                            sbLinea.append(PrinterUtility.espaciosBlanco(90 - auxiliar.length()));
                            sbLinea.append(df.format(detalle.getCantidadEmpaque())+" "+detalle.getEmpaque());
                            print.printLine(sbLinea.toString(), false);


                            sbLinea = new StringBuilder();
                            sbLinea.append(PrinterUtility.espaciosBlanco(15 - detalle.getCantidad().toString().length()));
                            sbLinea.append(detalle.getTipoUnidadMinima().getAbrev());

                            sbLinea.append(PrinterUtility.espaciosBlanco(12 - detalle.getTipoUnidadMinima().getAbrev().length()));
                            sbLinea.append(df.format(detalle.getCantidad()));

                            print.printLine(sbLinea.toString(), true);
                        } else {
                            print.printLine(sbLinea.toString(), true);
                            first = false;
                        }



                    }
                    lineaMax--;
                } while (producto.length() > 0);



                lineaTotales++;
            }

        }

        print.printBlankLine(31 - lineaTotales);

        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(8));
        sbLinea.append(guiaRemision.getNombreConductor());
        print.printLine(sbLinea.toString(), true);

        sbLinea = new StringBuilder("");
        sbLinea.append(PrinterUtility.espaciosBlanco(8));
        //sbLinea.append(guiaRemision.get());
        print.printLine(sbLinea.toString(), true);

        print.endPrintService();
    }
    
    
    public static boolean verificarImpresora(String impresora){

        PrinterService print = new PrinterService(36, impresora, false);
        
        if (!print.startPrintService()) {
            return false;
        }else{
            return true;
        }
        
    }
}
